package com.shujia.Day07;

public class Demo09WrapClass {
    public static void main(String[] args) {
        /*
            TODO 基本数据类型的包装类
                    Java本身是一个面向对象的语言 ,但是对于基本数据类型，没有对象的不是一个完全面向对象的语言
                        对于基本数据类型有提供其包装类，并给定了一些方法 对基本数据类型做补充
                基本类型和包装类的对应
                    Byte,Short,Integer,Long,Float,Double,Character,Boolean
                    byte
                对于多数包装类型是在基本数据类型上做了首字母大写 为一个类
                应用场景：
                    1.对字符串数据，需要将其转换成对应类型的数据，可以使用 包装类来完成
                    2.在类中定义属性时，有时将其表示成包装类，可以增加其属性的方法
                    3.在包装类中经常出现空指针问题
         */
        int i = 10;
        Integer integer = new Integer(10);
        int intValue = integer.intValue();
        System.out.println(integer);
        System.out.println(intValue);

        System.out.println(intValue == integer); // true
        System.out.println(integer.equals(intValue)); // true

        /*
            TODO 包装类和基本数据类型的转换问题：
                 问题1：对于compute中形参b类型为 int 但是可以传入Integer 类型
                 问题2: 对于 a 变量 为Integer类型 引用类型 但是可以使用 +
                 问题3: 对于返回值类型要求是Integer 但是使用int的res变量返回没有问题
                基本数据类型和包装类之间的自动拆箱和自动装箱  => 包装类 可以看成是对数据打包成一个快递箱
                    将int类型的数据 赋予给其包装类 称为自动装箱
                    将包装类 Integer 值赋予给 int 类型 称为 自动拆箱
         */
        Integer integer1 = 10;  // 将int类型的数据 赋予给其包装类
        int integerValue = new Integer(20);  //将包装类 Integer 值赋予给 int 类型 称为 自动拆箱
        int aInt = new Short((short) 20);
        // 拆解
        short aShort = new Short((short) 20);
        int aInt2 = aShort;

//        int aDouble = new Double(3.14);

        int compute = compute(integer, integer);
        System.out.println(compute);  // 20

        Boolean aBoolean = new Boolean("false");
        System.out.println(aBoolean.compareTo(aBoolean)); // 0

        int integer2 = new Integer("10");
        System.out.println(integer2);
        int integer3 = Integer.valueOf("5");
        System.out.println(integer3);


    }

    public static Integer compute(Integer a,int b){
        int res = a + b;
        return res;
    }
}
